package com.stargate.soft.scenario;

import java.sql.SQLException;

import com.stargate.bd.ConnectionBD;
import com.stargate.bd.bean.Acces;
import com.stargate.bd.bean.Etat;
import com.stargate.bd.bean.Sortie;
import com.stargate.bd.dao.DAOFactory;
import com.stargate.bd.dao.factory.AccesDAO;
import com.stargate.exception.PersonneNonEntreeException;

public class EnregistrerSortie {
	
	private Acces acces;
	private Sortie sortie;

	public EnregistrerSortie(Acces acces, Sortie sortie) throws SQLException {
		
		// transaction Serializable
		ConnectionBD.setSerializable();
				
		// insertion d'un accès
		AccesDAO accesDAO = new AccesDAO();
		accesDAO.insert(acces);
		int seqNum = accesDAO.getSeqNumAcces();
		
		// maj des objets acces et sortie
		acces.setNumAcces(seqNum);
		sortie.setNumAcces(seqNum);

		// insertion d'une sortie à ENABLE ou DISABLE
		try {
			DAOFactory.getSortieDAO().insert(sortie);
		} catch (SQLException e) {
			if (e.getErrorCode() == PersonneNonEntreeException.ERROR_CODE) {
				// personne n'est pas entrée dans le batiment
				System.err.println(e.getMessage());
				// enregistrement d'une sortie à DISABLE
				sortie.setEtatSortie(Etat.DISABLE);
				DAOFactory.getSortieDAO().insert(sortie);
			} else {
				throw e;
			}
		}
		
		// commit
		ConnectionBD.commit();
		
		this.acces = acces;
		this.sortie = sortie;
	}
	
	public Acces getAcces() {
		return acces;
	}
	
	public Sortie getSortie() {
		return sortie;
	}
}
